import time

from group_profile.llm.agent import AIAgent

"""基础对话智能体，当识别用户的意图为以下时进行基本对话和流程引导：
        0.基础对话
"""


class AnalystAgent(AIAgent):
    memory = []

    def get_system_prompt(self):
        prompt = """
        你的对外身份是自然人洞察智能助手，内部身份是基础对话人工智能，你需要与用户进行一般对话并引导用户进行群体数据的探索，探索的总体流程如下：
        0.基础对话，用户没有提到群体或群体的近义词，当用户没有提到群体的时候就属于此情况，你的回答需要引导用户进行步骤1的探索
        1.探索群体的全局情况，用户提到了群体或近义词，但没有提及筛选群体的条件
        2.探索群体的局部情况，用户提到了群体或近义词且用某城市、行政区等地区名词修饰或限定群体，但是没有提到群体id
        3.探索具体的群体，用户提到了群体或近义词且提到了具体的群体id
        
        当用户的意图被判断为0时，就会来与你对话。
        
        群体的概念：通过图算法和通信行业数据挖掘出来的自然人节点集合，经过加工处理后，以下是一个具体群体的例子：
        id:1
        用户数：32
        基站数：1
        群体主要地址：北京市朝阳区建国路87号
        群体主要经纬度：(39.928553,116.633287)
        群体城市：北京市
        群体行政区：朝阳区
        用户平均月资费：228.22125
        用户高频APP(最高流量)：知乎-2407.7MB
        用户高频APP(最高次数)：知乎-243次
        用户高频APP(最长时间)：知乎-3676.9MIN
        群组标签：['知乎高频群体', '朝阳区', '低资费群体']
        
        你的任务：
        请结合历史对话，用户问题，做出符合身份的回答并引导用户进行1.2.3流程的探索
        """

        return prompt

    def analyst_chat(self, data, user_prompt, history):
        start_time = time.time()
        response = self.stream_complete(user_prompt, history, self.get_system_prompt().format(str(data)))
        collected_chunks = []
        collected_messages = []
        # 通过事件流迭代
        for chunk in response:
            chunk_time = time.time() - start_time
            collected_chunks.append(chunk)
            chunk_message = chunk.choices[0].delta
            collected_messages.append(chunk_message)
            # print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}")
            print(chunk.choices[0].delta.content, end='')
        #
        print()

        # 打印完整响应和文本
        full_reply_content = ''.join([m.content for m in collected_messages])
        return full_reply_content


if __name__ == '__main__':
    agent = AnalystAgent()
    groupdata = "[GroupProfile(user_size=36, lac_size=1, lac_max_add='北京市海淀区清华园1号', lac_max_lat=np.float64(40.018772), lac_max_lgtd=np.float64(116.316244), lac_max_city='北京市', lac_max_area='海淀区', user_avg_fee=231.1233333333334, max_app_usage_name='快手', max_app_usage_value=np.float64(2309.5), max_app_cnt_name='快手', max_app_cnt_value=np.int64(238), max_app_time_name='快手', max_app_time_value=np.float64(3589.7000000000003), tags=['快手高频群体', '海淀区', '低资费群体'], subgraph=<networkx.classes.graph.Graph object at 0x1136827c0>), GroupProfile(user_size=43, lac_size=1, lac_max_add='北京市海淀区颐和园路5号', lac_max_lat=np.float64(39.972013), lac_max_lgtd=np.float64(116.293424), lac_max_city='北京市', lac_max_area='海淀区', user_avg_fee=240.77651162790696, max_app_usage_name='拼多多', max_app_usage_value=np.float64(2797.4), max_app_cnt_name='拼多多', max_app_cnt_value=np.int64(283), max_app_time_name='拼多多', max_app_time_value=np.float64(4239.2), tags=['拼多多高频群体', '海淀区', '低资费群体'], subgraph=<networkx.classes.graph.Graph object at 0x1136b5d00>), GroupProfile(user_size=34, lac_size=1, lac_max_add='北京市海淀区中关村大街27号', lac_max_lat=np.float64(39.980883), lac_max_lgtd=np.float64(116.478795), lac_max_city='北京市', lac_max_area='海淀区', user_avg_fee=238.33352941176477, max_app_usage_name='拼多多', max_app_usage_value=np.float64(2545.1), max_app_cnt_name='拼多多', max_app_cnt_value=np.int64(261), max_app_time_name='拼多多', max_app_time_value=np.float64(3902.2), tags=['拼多多高频群体', '海淀区', '低资费群体'], subgraph=<networkx.classes.graph.Graph object at 0x113682fd0>)]"
    # 记录请求发送前的时间
    response1 = agent.analyst_chat()

    print(f"Full conversation received: {response1}")
